#ifndef PRODUCTBROWSEPAGE_H
#define PRODUCTBROWSEPAGE_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QComboBox>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QTextEdit>
#include <QSplitter>
#include <QGroupBox>
#include <QScrollArea>
#include <QHeaderView>
#include <QTimer>
#include <QMessageBox>
#include "productbrowseservice.h"
#include "productdao.h"

/**
 * 商品浏览页面类
 * 表现层：负责商品信息的展示和用户交互
 * 作为IM模块堆栈窗口的第三个页面
 */
class ProductBrowsePage : public QWidget
{
    Q_OBJECT

public:
    explicit ProductBrowsePage(ProductDAO* productDao, QWidget *parent = nullptr);
    ~ProductBrowsePage();

    // 刷新页面数据
    void refreshData();
    
    // 设置当前选中的商品
    void setSelectedProduct(int productId);

public slots:
    // 搜索商品
    void searchProducts();
    
    // 按分类筛选
    void filterByCategory();
    
    // 清空搜索
    void clearSearch();
    
    // 刷新商品列表
    void refreshProductList();
    
    // 显示商品详情
    void showProductDetail(int row, int column);
    
    // 处理服务层错误
    void handleServiceError(const QString& error);

private slots:
    // 延迟搜索（避免频繁查询）
    void performDelayedSearch();

private:
    // UI组件
    QVBoxLayout* m_mainLayout;
    QHBoxLayout* m_topLayout;
    QHBoxLayout* m_searchLayout;
    QSplitter* m_contentSplitter;
    
    // 搜索和筛选区域
    QGroupBox* m_searchGroup;
    QLineEdit* m_searchEdit;
    QPushButton* m_searchBtn;
    QPushButton* m_clearBtn;
    QComboBox* m_categoryCombo;
    QPushButton* m_refreshBtn;
    
    // 商品列表区域
    QGroupBox* m_listGroup;
    QTableWidget* m_productTable;
    QLabel* m_countLabel;
    
    // 商品详情区域
    QGroupBox* m_detailGroup;
    QScrollArea* m_detailScrollArea;
    QTextEdit* m_detailText;
    QLabel* m_productImageLabel;
    
    // 业务逻辑
    ProductBrowseService* m_service;
    ProductDAO* m_productDao;
    
    // 数据缓存
    QVector<QMap<QString, QVariant>> m_currentProducts;
    QVector<QMap<QString, QVariant>> m_allCategories;
    
    // 搜索延迟定时器
    QTimer* m_searchTimer;
    
    // 当前选中的商品ID
    int m_selectedProductId;
    
    // 私有方法
    void initUI();
    void setupSearchArea();
    void setupProductTable();
    void setupDetailArea();
    void setupConnections();
    void applyStyles();
    
    // 数据处理方法
    void loadCategories();
    void populateProductTable(const QVector<QMap<QString, QVariant>>& products);
    void updateProductDetail(const QMap<QString, QVariant>& product);
    void updateCountLabel(int count);
    
    // 表格辅助方法
    void setupTableHeaders();
    void resizeTableColumns();
    QTableWidgetItem* createTableItem(const QString& text);
    
    // 样式常量
    static const QString MAIN_STYLE;
    static const QString GROUP_STYLE;
    static const QString TABLE_STYLE;
    static const QString BUTTON_STYLE;
    static const QString SEARCH_STYLE;
};

#endif // PRODUCTBROWSEPAGE_H